package m202401.d07;

import m202401.d06.Q2;

import java.util.Objects;

/**
 * @@author: 爱做梦的锤子
 * @date: 2024/1/7 08:59
 */
//25. K 个一组翻转链表
public class Q25 {
    public ListNode reverseKGroup(ListNode head, int k) {
        ListNode res = new ListNode(-1);
        ListNode resLast = null;
        ListNode p = head;
        int start = 0;
        while (start < k) {
            if (p == null) {
                return reverseKGroup(res.next);
            }
            ListNode temp = res.next;
            res.next = p;
            if (resLast == null) {
                resLast = res.next;
            }
            p = p.next;
            res.next.next = temp;
            start++;
        }
        Objects.requireNonNullElse(resLast, res).next = reverseKGroup(p, k);
        return res.next;
    }

    private ListNode reverseKGroup(ListNode head) {
        ListNode res = new ListNode(-1);
        while (head != null) {
            ListNode temp = res.next;
            res.next = head;
            head = head.next;
            res.next.next = temp;
        }
        return res.next;
    }

    static class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
            next = null;
        }
    }
}
